package net.vmiranda.jeds.utils.modulos;


public abstract class ModuloConfiguracion<T, R> extends MBean<T,R> {

	
	public ModuloConfiguracion(){
		estado = EstadoModulo.VISUALIZACION;
	}
	public String aceptar() {
		switch (estado) {
		
		case VISUALIZACION:
			aceptarVisualizacion();
			break;
		case EDICION:
			aceptarEdicion();
			break;

		}
		return null;
	}

	

	/**
	 * En principio no hace nada
	 */
	protected void aceptarVisualizacion() {
		estado = EstadoModulo.EDICION;
	}

	/**
	 * Modifica el elemento activo
	 */
	protected void aceptarEdicion() {
		try {
			T elemento = modificar(data);
			setData(elemento);
			estado = EstadoModulo.VISUALIZACION;
			System.out.println("A visualizar de nuevo");
		} catch (IllegalStateException ex) {
			// Si hay algun problema mantengo el estado de edicion
			estado = EstadoModulo.EDICION;
		}
	}

	

	public void cancelar() {
		switch (estado) {
		
		case EDICION:
			cancelarEdicion();
			break;
		case VISUALIZACION:
			cancelarVisualizacion();
			break;
		}
	}

	
	private void cancelarVisualizacion() {
		//No hace nada...
	}

	/**
	 * Se recupera el elemento seleccionado como activo.
	 */
	private void cancelarEdicion() {
		R elementoActivo = (R) dataModelActivo.getSeleccion();
		setData(obtenerElemento(elementoActivo));
		estado = EstadoModulo.VISUALIZACION;

	}

	

	

}
